home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / paolib / rbios.asm < prev    next >
Assembly Source File  |  1991-10-18  |  4KB  |  141 lines

  1. ;==============================================================================
  2. ;    << 386ASM V2.0 >>  for  FM TOWNS
  3. ;==============================================================================
  4. .386p
  5.         PAGE        60,132
  6.         NAME        RBIOSCALL
  7.         TITLE        REAL BIOS CALL PROCEDURE
  8. ;==============================================================================
  9. ;    リアルBIOSコール
  10. ;
  11. ;    CREATE : 1990.03.17
  12. ;    FINISH : 1990.03.17
  13. ;
  14. ;    < note > : TABS = 4
  15. ;
  16. ;    < History >
  17. ;    1990.03.17 : CREATE
  18. ;    1991.04.23 : 清書
  19. ;
  20. ;    Programmed by Y.Hirata ( Nifty-ID : NAB03321 )
  21. ;==============================================================================
  22. ;
  23. INCLUDE    hc.inc                                ;
  24. ;
  25. CGROUP    GROUP pmcode, CODE                    ;
  26. DGROUP    GROUP pmdata, DATA                    ;
  27. ;
  28. ;--------------------------------------------
  29.         public    Make_bufs                    ; リアル-ネイティブ用バッファ確保
  30.         public    RBIOS_call                    ; リアルBIOS呼出し
  31.         public    RBIOS_rmseg                    ; リアルセグメント
  32.         public    RBIOS_rmoff                    ; リアルオフセット
  33.         public    RBIOS_pmseg                    ; ネイティブセグメント
  34.         public    RBIOS_pmoff                    ; ネイティブオフセット
  35. ;--------------------------------------------
  36. ;
  37. ;////////////////////////////////////////////
  38. ;            ネイティブ部
  39. ;////////////////////////////////////////////
  40. ;
  41. ;********************************************
  42. ;    リアル/ネイティブ通信用データ領域
  43. ;********************************************
  44. pmdata    SEGMENT                                ;
  45.         ASSUME    ds:DGROUP                    ;
  46. ;
  47. RBIOS_rmseg        DD    ?                        ; REAL MODE DATA SEGMENT
  48. RBIOS_rmoff        DD    ?                        ;
  49. RBIOS_pmseg        DD    ?                        ; PROTECTED MODE DATA SEGMENT
  50. RBIOS_pmoff        DD    ?                        ;
  51. ;
  52. pmdata        ENDS                            ;
  53. ;
  54. pmcode    SEGMENT                                ;
  55.         ASSUME    cs:pmcode                    ;
  56. ;
  57. ;********************************************
  58. ;        共通ルーチン
  59. ;********************************************
  60. ;--------------------------------------------
  61. ;    リアルBIOS呼出し準備
  62. ;--------------------------------------------
  63.         ALIGN    4                            ; dword boundary
  64. Make_bufs    PROC    NEAR                    ;
  65.             push    eax                        ;
  66.             push    ebx                        ;
  67.             push    ecx                        ;
  68.             push    edx                        ;
  69.             push    es                        ;
  70. ;
  71.             mov        ax,250Dh                ;
  72.             int        INT_DOS                    ;
  73.             mov        word PTR RBIOS_rmoff,bx    ; データバッファのリアルモードアドレス
  74.             shr        ebx,16                    ; 16bit right shift
  75.             mov        dword PTR RBIOS_rmseg,ebx
  76.                                             ; リアルモードセグメント
  77.             mov        dword PTR RBIOS_pmoff,edx
  78.                                             ; データバッファのネイティブアドレス
  79.             mov        ax,es                    ;
  80.             mov        word PTR RBIOS_pmseg,ax    ; ネイティブモードセグメント
  81. ;
  82.             pop    es                            ;
  83.             pop    edx                            ;
  84.             pop    ecx                            ;
  85.             pop    ebx                            ;
  86.             pop    eax                            ;
  87.             ret                                ;
  88. Make_bufs    ENDP                            ;
  89. ;
  90. RMINT        STRUC                            ;
  91. RMI_INUM        DW    ?                        ; INTERRUPT NUMBER
  92. RMI_DS            DW    ?                        ; REAL MODE DS
  93. RMI_ES            DW    ?                        ; REAL MODE ES
  94. RMI_FS            DW    ?                        ; REAL MODE FS
  95. RMI_GS            DW    ?                        ; REAL MODE GS
  96. RMI_EAX            DD    ?                        ; EAX
  97. RMI_EDX            DD    ?                        ; EDX
  98. RMINT        ENDS                            ;
  99. ;
  100. ;--------------------------------------------
  101. ;    リアルBIOSの呼出し
  102. ;--------------------------------------------
  103.         ALIGN    4                            ; dword boundary
  104. RBIOS_call    PROC    NEAR                    ;
  105. #INTNO        EQU    (word PTR 8[ebp])            ; INTERRUPT NUMBER
  106. #RMDS        EQU    (word PTR 12[ebp])            ; DS (REAL MODE)
  107. #RMES        EQU    (word PTR 16[ebp])            ; ES (REAL MODE)
  108. #RMI        EQU    (dword PTR [ebp - (size RMINT)])
  109.                                             ;
  110.             push    ebp                        ;
  111.             mov        ebp,esp                    ;
  112.             sub        esp,size RMINT            ; ローカル変数の割り当て
  113. ;
  114.             mov        #RMI.RMI_EAX,eax          ; EAX
  115.             mov        #RMI.RMI_EDX,edx        ; EDX
  116.             mov        ax,#RMDS                ;
  117.             mov        #RMI.RMI_DS,ax            ; DS
  118.             mov        ax,#RMES                ;
  119.             mov        #RMI.RMI_ES,ax            ; ES
  120.             mov        ax,#INTNO                ;
  121.             mov        #RMI.RMI_INUM,ax        ; F-BIOS割り込み番号
  122.             push    edx                        ;
  123.             push    ds                        ; リアルモード割り込みの発行
  124.             mov        ax,ss                    ; DS:EDX = 割り込みデータブロック
  125.             mov        ds,ax                    ;
  126.             lea        edx,#RMI                ;
  127.             mov        ax,2511h                ; 割り込みの発行
  128.             int        INT_DOS                    ;
  129.             pop        ds                        ;
  130.             pop        edx                        ;
  131. ;
  132.             add        esp,size RMINT            ;
  133.             pop        ebp                        ; レジスタ復帰~終了
  134.             ret                                ;
  135. RBIOS_call    ENDP                            ;
  136. ;
  137. pmcode        ENDS                            ;
  138. ;
  139.         END
  140.  
  141.